package com.zzyy.study.delayqueue;

import java.util.concurrent.TimeUnit;

/**
 * @auther zzyy
 * @create 2024-07-07 9:56
 */
public class DelayQueueTaskProcessor_Test
{
    public static void main(String[] args) throws InterruptedException
    {
        //创建一个延迟任务处理器，容量是1000，也就是最多可以有1000个待处理的延迟任务
        DelayQueueTaskProcessor delayTaskProcessor =
                new DelayQueueTaskProcessor("delayTaskProcessor01", 1000, 5);


        //放入5个待处理的延迟任务，延迟时间分别是：5s,4s,3s,2s,1s
        for (int i = 5; i >= 1; i--) {
            //放入时间
            long putTime = System.currentTimeMillis();
            //延迟时间
            long delayTime = i;
            String task = "task-" + i +"放入时间："+putTime;
            //放入需要处理的任务（延迟时间、延迟时间单位、任务、任务消费者）
            boolean putSuccess = delayTaskProcessor.put(delayTime, TimeUnit.SECONDS, () -> {
                //任务实际处理的时间
                long actualTime = System.currentTimeMillis();
                System.out.println("任务：" + task + "处理时间: "+actualTime+
                        "，任务延迟时间(ms)：" + TimeUnit.MILLISECONDS.convert(delayTime, TimeUnit.SECONDS) +
                        "，任务实际处理的时间 - 任务放入的时间 (ms)：" + (actualTime - putTime));
            });

            System.out.println(task + ":" + (putSuccess ? "放入任务成功" : "放入任务失败"));
        }

        System.out.println();

        //这里等7秒，等所有的延迟任务处理完毕
        try { TimeUnit.SECONDS.sleep(7); } catch (InterruptedException e) { e.printStackTrace(); }

        //停止延迟任务处理器
        delayTaskProcessor.destroy();
    }
}
